//引入公共函数util
var util = require('../../utils/util');

//声明用于存放页面实例的变量
var that;

//获取请求接口的地址
var requestDomain = util.config('requestDomain');

//Page函数
Page({

  //页面公共函数
  data: {

    //菜品ID
    foodId: '',
    
    //菜品类型标识名称
    foodTypeName: '',

    //菜品名称
    foodName: '',

    //菜品价格
    foodPrice: '',
    
    //当前的操作模式：新增/修改
    useMode: '',

    //菜品类型列表
    foodTypeList: [],

    //菜品图片名称
    foodPhotoName: '',

    //菜品图片的URL
    foodPhotoUrl: '',

    //菜品数据
    foodData: {},

    //是否执行了上传图片的操作
    foodPhotoUpload: false,

    //菜品图片的存放文件夹名
    foodPhotoFolder: util.config('foodPhotoFolder'),

    hideLoadingIcon: false

  },

  /**
   * 增加或修改页面载入时触发
   */

  onLoad: function (params) {
    
    //将页面实例赋给that变量
    that = this;

    //获取菜品ID
    that.data.foodId = params.foodId || '';

    //获取菜品类型列表数组
    var foodTypes = util.globalData('foodTypeList') || [];

    //判断是否存在菜品类型列表
    if(foodTypes && foodTypes.length > 0) {

      //遍历菜品类型列表
      for(var typeIndex in foodTypes) {

        //如果这是第一个菜品类型
        if(typeIndex == 0) {

          //将这个菜品类型的redio设为已勾选
          that.data.foodTypeName = foodTypes[typeIndex].typeName;

          //将这个菜品类型的radio设置勾选
          foodTypes[typeIndex].checked = true;
          
          //这个菜品已设置过勾选状态
          continue;
        
        }

        //将其他的菜品类型radio设置为未勾选
        foodTypes[typeIndex].checked = false;

      }
    }

    //更新操作模式和菜品类型列表
    that.setData({
      useMode: params.useMode,
      foodTypeList: foodTypes
    });

    //设置标题为对应的操作名称
    wx.setNavigationBarTitle({
      title: that.data.useMode == 'addFood' ? '添加菜品' : '修改菜品'
    });

    //判断当前操作模式是否为修改菜品
    if(that.data.useMode == 'editFood' && that.data.foodId != '') {

      //获取菜单列表数据
      var foodMenuData = util.globalData('foodMenuData');

      //遍历菜单列表
      for(var foodIndex in foodMenuData) {

        //是否找到当前操作的菜品
        if(foodMenuData[foodIndex].foodId == that.data.foodId) {

          //获取当前的菜品数据
          that.data.foodData = foodMenuData[foodIndex];

          //获取到当前菜品的照片数据
          that.data.foodPhotoName = that.data.foodData.foodPhoto;

          //设置显示当前菜品图片、菜品名称、菜品价格、菜品类型名称
          that.setData({

            //从配置中获取请求菜品照片URL替换storeId为真实的商户ID
            foodPhotoUrl: util.config('foodPhotoRequestUrl').replace('{storeId}', util.globalData('storeId')) + that.data.foodData.foodPhoto,

            //菜品名称
            foodName: that.data.foodData.foodName,
            
            //菜品价格
            foodPrice: that.data.foodData.foodPrice / 100,
            
            //菜品类型名称
            foodTypeName: that.data.foodData.foodType,

          });

          //将菜品的类型列表的radio组更改为对应的选择
          that.changeFoodType(that.data.foodData.foodTypeName);

          //解决完毕，跳出处理
          break;

        }
      }
    }
  },

  /**
   * 图片加载完成事件
   */

  foodPhotoLoaded: function(e) {
    console.log(e);
    that.setData({hideLoadingIcon: true});
  },

  /**
   * 添加菜品图片函数
   */

  addFoodPhoto: function() {

    //选择图片
    wx.chooseImage({
      
      //限制只能上传一张图片
      count: 1,

      //设置上传的只是缩略图
      sizeType: ['compressed'],

      //设置图片来源可以为照相或本地相册
      sourceType: ['album', 'camera'],

      //上传成功
      success: function(result){

        //取得图片上传临时路径
        var foodPhotoUrl = result.tempFilePaths[0];
        
        //更新菜品图片的显示以及设置为已上传图片
        that.setData({

          //菜品图片的URL
          foodPhotoUrl: foodPhotoUrl,
          
          //设置当前执行了上传图片
          foodPhotoUpload: true

        });
      }
    });
  },

  /**
   * 输入菜品名字时触发的函数
   */

  inputFoodName: function(e) {

    //获取到输入的菜品名称
    that.data.foodName = e.detail.value;
  
  },

  /**
   * 输入菜品价格时触发的函数
   */

  inputFoodPrice: function(e) {

    //获取到输入的菜品价格
    that.data.foodPrice = e.detail.value;

  },

  /**
   * 改变菜品类型时触发函数
   */

  foodTypeChange: function(e) {
    
    //获取到切换到的菜品类型
    that.data.foodTypeName = e.detail.value;
  
  },

  /**
   * 修改菜品类型函数
   */

  changeFoodType: function(typeName) {

    //遍历菜品类型列表数组
    for(var typeIndex in that.data.foodTypeList) {
      
      //判断是否找到需要切换到的菜品类型标签
      if(that.data.foodTypeList[typeIndex].typeName == typeName) {

        //获取菜品类型名称并暂存
        that.data.foodTypeName = that.data.foodTypeList[typeIndex].typeName;
        
        //设置切换到这个新类型的radio
        that.data.foodTypeList[typeIndex].checked = true;

      }
      else {

        //设置其它radio为未勾选
        that.data.foodTypeList[typeIndex].checked = false;

      }
    }

    //更新菜品类型勾选状态
    that.setData({foodTypeList: that.data.foodTypeList});

  },

  /**
   * 增加菜品函数
   */

  addFood: function() {

    //检查当前输入的菜品信息是否完善
    if(!that.checkFoodInfo()) {
      return;
    }
    console.log('添加菜品');

    //显示顶部加载图标
    wx.showNavigationBarLoading();

    //上传文件并触发添加菜单的接口
    wx.uploadFile({

      //指定上传菜品图片的接口地址
      url: requestDomain + 'file/upload',
      
      //指定需要上传的图片在本地缓存中的地址
      filePath: that.data.foodPhotoUrl,
      
      //指定上传到哪个文件夹
      name: that.data.foodPhotoFolder,

      //上传图片时附加的数据
      formData: {
      
        //商户ID
        storeId: util.globalData('storeId'),
        
        //处理数据的接口
        handleInterface: 'food/add',
        
        //添加的菜品类型
        foodType: encodeURI(that.data.foodTypeName),
        
        //添加的菜品名称
        foodName: encodeURI(that.data.foodName),
        
        //添加的菜品价格
        foodPrice: encodeURI(parseInt(that.data.foodPrice * 100))
      
      },
      
      //添加菜品操作成功
      success: function(result){
        
        //判断是否是为JSON字符串如果是则返回对象
        result = util.isJson(result.data);
        
        //判断数据是否为一个对象
        if(result && util.checkSuccess(result)) {

          //隐藏顶部加载图标
          wx.hideNavigationBarLoading();

          wx.navigateBack({
            delta: 1
          });

        }
        else {

          //添加菜品失败隐藏添加中的加载框并显示错误提示
          wx.hideToast();
          util.showError('添加菜品失败', '在进行添加菜品操作时发生错误' + result.data.errMsg, result.data.errCode);

        }
      },
      fail: function(e) {

        //发起添加菜品请求失败显示错误
        util.showError('添加菜品失败', '发起添加菜品请求时失败');

      }
    });
  },

  /**
   * 修改菜品函数
   */

  editFood: function() {

    //检查当前输入的菜品信息是否合法
    if(!that.checkFoodInfo()) {
      return;
    }
    console.log('修改菜品');

    //显示顶部加载图标
    wx.showNavigationBarLoading();

    //判断是否已经进行了上传操作
    if(that.data.foodPhotoUpload) {
      wx.uploadFile({
        url: requestDomain + 'file/upload',
        filePath: that.data.foodPhotoUrl,
        name: that.data.foodPhotoFolder,
        formData: {
          storeId: util.globalData('storeId'),
          _3rdSession: util.globalData('_3rdSession'),
          handleInterface: 'food/update',
          foodPhotoFolder: that.data.foodPhotoFolder,
          foodId: encodeURI(that.data.foodId),
          foodType: encodeURI(that.data.foodTypeName),
          foodName: encodeURI(that.data.foodName),
          foodPrice: encodeURI(parseInt(that.data.foodPrice * 100)),
          oldFileName: encodeURI(that.data.foodPhotoName)
        },
        success: function(result){
          result = util.isJson(result.data);
          if(result && util.checkSuccess(result)) {
            
            //隐藏顶部加载图标
            wx.hideNavigationBarLoading();

            wx.navigateBack({
              delta: 1
            });

          }
          else {
            console.log(result);
            wx.hideToast();
            util.showError('更新菜品失败', '在进行更新菜品操作时发生错误' + result.errMsg, result.errCode);
          }
        },
        fail: function() {
          wx.hideToast();
          util.showError('更新菜品失败', '发起更新菜品请求时失败');
        }
      });
    }
    else {

      //判断是否这些菜品信息没有进行任何修改直接点击的确认修改
      if(that.data.foodData.foodTypeName == that.data.foodTypeName && that.data.foodData.foodName == that.data.foodName && that.data.foodData.foodPrice == that.data.foodPrice * 100) {
        console.log('直接跳出');

        //由于信息没有做任何更改所以直接显示成功被跳出
        //隐藏顶部加载图标
        wx.hideNavigationBarLoading();

        wx.navigateBack({
          delta: 1
        });

        //直接跳出
        return;

      }

      //请求更新菜品接口
      wx.request({

        //指定更新菜品数据的接口
        url: requestDomain + 'food/update',
        
        //设置用于更新菜品数据的数据
        data: {

          //商户ID
          storeId: util.globalData('storeId'),
          
          //验证用的3rdSession
          _3rdSession: util.globalData('_3rdSession'),
          
          //菜品ID
          foodId: that.data.foodId,
          
          //菜品类型
          foodType: that.data.foodTypeName,
          
          //菜品名称
          foodName: that.data.foodName,
          
          //菜品价格
          foodPrice: parseInt(that.data.foodPrice * 100)
        
        },
        
        method: 'POST',
        
        //更新菜品信息请求发送成功
        success: function(result){

          //判断更新菜品数据是否成功
          if(result && util.checkSuccess(result)) {

            //隐藏顶部加载图标
            wx.hideNavigationBarLoading();

            wx.navigateBack({
              delta: 1
            });

          }
          else {

            //更新菜品信息失败隐藏更新中的提示框以及显示错误
            wx.hideToast();
            util.showError('更新菜品失败', '在进行更新菜品操作时发生错误' + result.data.errMsg, result.data.errCode);

          }
        },
        fail: function() {

          //发送修改菜单请求失败隐藏更新中的提示框以及显示错误
          wx.hideToast();
          util.showError('更新菜品失败', '发起更新菜品请求时失败');

        }
      });
    }
  },

  /**
   * 根据菜品类型名获取菜品类型函数
   */

  getFoodType: function(typeName) {

    //遍历菜品类型列表
    for(var typeIndex in that.data.foodTypeList) {

      //判断是否找到对应菜品类型名的类型对象
      if(that.data.foodTypeList[typeIndex].typeName == typeName) {

        //找到菜品类型并返回
        return that.data.foodTypeList[typeIndex].typeVal;

      }
    }

    //未找到对应的菜品类型直接返回空字符串
    return '';

  },

  /**
   * 检查当前输入的菜品数据合法性函数
   */

  checkFoodInfo: function() {

    let {foodTypeName, foodName, foodPrice} = that.data;

    console.log(foodPrice);

    //判断菜品名称是否为空
    if(foodName.length == 0) {

      //显示菜品名称不合法提示
      wx.showModal({
        title: '操作错误',
        content: '菜品名称不合法，请重新输入'
      });

      //返回不合法
      return false;

    }

    //判断价格是否为空字符串或者是否为非数字
    else if(!(/^[0-9]{1,9}(\.[0-9]{1,2})?$/.test(foodPrice))) {

      //显示菜品价格不合法提示
      wx.showModal({
        title: '操作错误',
        content: '菜品价格不正确，请输入如22、12.1、0.1、0.01这样的价格'
      });

      //返回不合法
      return false;

    }

    //判断菜品类型是否为空字符串
    else if(foodTypeName.length == 0) {

      //显示菜品类型不合法提示
      wx.showModal({
        title: '操作错误',
        content: '菜品类型不合法，请重新选择'
      });

      //返回不合法
      return false;

    }

    //通过检查，返回合法
    return true;
    
  }
});